#pragma once

#include "base.h"

OPEN_JLIB_NS


typedef __INT8_TYPE__ s8;
typedef __INT8_TYPE__ s8v16 __attribute__((vector_size(16)));
typedef __INT8_TYPE__ s8v32 __attribute__((vector_size(32)));
typedef __INT8_TYPE__ s8v64 __attribute__((vector_size(64)));

typedef __UINT8_TYPE__ u8;
typedef __UINT8_TYPE__ u8v16 __attribute__((vector_size(16)));
typedef __UINT8_TYPE__ u8v32 __attribute__((vector_size(32)));
typedef __UINT8_TYPE__ u8v64 __attribute__((vector_size(64)));

typedef __INT16_TYPE__ s16;
typedef __INT16_TYPE__ s16v8 __attribute__((vector_size(16)));
typedef __INT16_TYPE__ s16v16 __attribute__((vector_size(32)));
typedef __INT16_TYPE__ s16v32 __attribute__((vector_size(64)));

typedef __UINT16_TYPE__ u16;
typedef __UINT16_TYPE__ u16v8 __attribute__((vector_size(16)));
typedef __UINT16_TYPE__ u16v16 __attribute__((vector_size(32)));
typedef __UINT16_TYPE__ u16v32 __attribute__((vector_size(64)));

typedef __INT32_TYPE__ s32;
typedef __INT32_TYPE__ s32v4 __attribute__((vector_size(16)));
typedef __INT32_TYPE__ s32v8 __attribute__((vector_size(32)));
typedef __INT32_TYPE__ s32v16 __attribute__((vector_size(64)));

typedef __UINT32_TYPE__ u32;
typedef __UINT32_TYPE__ u32v4 __attribute__((vector_size(16)));
typedef __UINT32_TYPE__ u32v8 __attribute__((vector_size(32)));
typedef __UINT32_TYPE__ u32v16 __attribute__((vector_size(64)));

typedef __INT64_TYPE__ s64;
typedef __INT64_TYPE__ s64v2 __attribute__((vector_size(16)));
typedef __INT64_TYPE__ s64v4 __attribute__((vector_size(32)));
typedef __INT64_TYPE__ s64v8 __attribute__((vector_size(64)));

typedef __UINT64_TYPE__ u64;
typedef __UINT64_TYPE__ u64v2 __attribute__((vector_size(16)));
typedef __UINT64_TYPE__ u64v4 __attribute__((vector_size(32)));
typedef __UINT64_TYPE__ u64v8 __attribute__((vector_size(64)));

typedef long long signed int sll;
typedef long long unsigned int ull;

typedef float f32;
typedef float f32v4 __attribute__((vector_size(16)));
typedef float f32v8 __attribute__((vector_size(32)));
typedef float f32v16 __attribute__((vector_size(64)));

typedef double f64;
typedef double f64v2 __attribute__((vector_size(16)));
typedef double f64v4 __attribute__((vector_size(32)));
typedef double f64v8 __attribute__((vector_size(64)));

typedef char c8;
typedef __CHAR16_TYPE__ c16;
typedef __CHAR32_TYPE__ c32;

typedef __SIZE_TYPE__ uwl;
typedef __PTRDIFF_TYPE__ swl;


CLOSE_JLIB_NS
